-- Copyright (c) 2015,2016 Lucky Byte, Inc.
--
-- Summary : 银联 ACP 文件下载
--
-- Author  : 吴小虎 <xiaohu@lucky-byte.com>
-- Since   : 2016.8.8
--
-- History
--  * 2016.8.8 : 创建此文件
--
require "core.lib"

-- 解析命令行参数
local _optargs, _optind = core.getopt(arg, "d:m:", {
    settle_date = "d",    -- 清算日期
    merno       = "m",    -- 商户号(可选)
})


-- 如果没有提供清算日期参数，则默认为当前日期
if _optargs.d then
    _optargs.settle_date = core.date(_optargs.d)
    if not _optargs.settle_date then
        logger.error('参数[--settle_date]的值[%s]无效.', _optargs.d)
        return
    end
else
    _optargs.settle_date = core.date()
end

-- 如果指定了商户号，则只下载此商户的文件
_optargs.merno = _optargs.m


-- 下载商户文件
--
local _dnload_merch_file = function(merch)
    local _071_packet = lib071.new_packet()

    _071_packet.set('txnType', '76')
    _071_packet.set('txnSubType', '01')
    _071_packet.set('bizType', '000000')
    _071_packet.set('accessType', '0')
    _071_packet.set('merId', merch.get('merno'))
    _071_packet.set('settleDate', _optargs.settle_date:fmt('%m%d'))

    -- 设置查询条件(原交易时间和订单号)
    _071_packet.set('txnTime', os.date('%Y%m%d%H%M%S'))
    _071_packet.set('fileType', '00')

    -- 发送查询交易报文
    local _fowd = lib071.forward({
        uuid = uuid(), indirect = true, packet = _071_packet, merch = merch
    })
    if not _fowd or not _fowd.respkt then
        logger.warn('执行 ACP 文件传输交易失败.')
        return
    end
    local _resp_ok = lib071.respkt_ok(_fowd.respkt)
    if _resp_ok then
        logger.info('执行 ACP 文件传输交易成功.')
    else
        logger.warn('执行 ACP 文件传输交易失败[%s: %s].', lib071.rescode(_fowd.respkt))
    end
end


-- 查询所有全渠道外联商户
--
local _sql = [[
    select * from pay_merch where chnl = 3 and inside = false
]]
if _optargs.merno then
    _sql = _sql .. string.format(" and merno = '%s'", _optargs.merno)
end
local _table = jdbc.select(_sql)

-- 如果没有这样的记录，直接返回
if _table.count == 0 then
    logger.trace('没有查询到全渠道外联商户，处理完毕...')
    return
end
for i = 0, _table.count - 1 do
    local _merch = _table.get_record(i)
    logger.debug('开始下载商户[%s]的对账文件.', _merch.get('merno'))
    _dnload_merch_file(_merch)
end

logger.info('所有[%s]个商户的文件下载完毕.', _table.count)
